package com.odais.AE_Modifier;

import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.AlphaModifier;
import org.andengine.entity.modifier.EntityModifier;
import org.andengine.entity.modifier.IEntityModifier.IEntityModifierListener;
import org.andengine.entity.modifier.LoopEntityModifier;
import org.andengine.entity.modifier.LoopEntityModifier.ILoopEntityModifierListener;
import org.andengine.entity.modifier.MoveByModifier;
import org.andengine.entity.modifier.ParallelEntityModifier;
import org.andengine.entity.modifier.ScaleModifier;
import org.andengine.entity.modifier.SequenceEntityModifier;
import org.andengine.util.modifier.IModifier;
import org.andengine.util.modifier.LoopModifier;

import android.content.Context;

/**
 *
 * @author Lionel DECELLE
 * @since 8 juin 2012 - 10:50:30
 *
 */
public class FlowerSplit extends EntityModifier
{
// ===========================================================
// Constants
// ===========================================================

// ===========================================================
// Fields
// ===========================================================
	Context context;

	IEntityModifierListener pEntityModifierListener;
	ILoopEntityModifierListener pLoopModifierListener;
	SequenceEntityModifier pEntityModifierExpand, pEntityModifierContract;
	LoopEntityModifier entityModifier;
	private float pX, pY;
	private boolean mExpand;

// ===========================================================
// Constructors
// ===========================================================

	public FlowerSplit(Context context, float pX, float pY, boolean expand)
	{
		this.context = context;
		this.pX = pX;
		this.pY = pY;
		this.mExpand = expand;

		pEntityModifierListener = new IEntityModifierListener() {
			@Override
			public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {
			}

			@Override
			public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {
			}
		};


		pLoopModifierListener = new ILoopEntityModifierListener() {
							@Override
							public void onLoopStarted(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
							}

							@Override
							public void onLoopFinished(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
							}
						};

		pEntityModifierExpand = new SequenceEntityModifier(
								new ParallelEntityModifier(
										new AlphaModifier(0.2f, 0, 1),
										new ScaleModifier(0.2f, 0, 1),
										new MoveByModifier(0.2f, this.pX, this.pY)
								)
						);

		pEntityModifierContract = new SequenceEntityModifier(
								new ParallelEntityModifier(
										new AlphaModifier(0.2f, 1, 0),
										new ScaleModifier(0.2f, 1, 0),
										new MoveByModifier(0.2f, this.pX, this.pY)
								)
						);

		if(expand)
			entityModifier = new LoopEntityModifier(pEntityModifierListener, 1, pLoopModifierListener, pEntityModifierExpand);
		else
			entityModifier = new LoopEntityModifier(pEntityModifierListener, 1, pLoopModifierListener, pEntityModifierContract);
	}



	// ===========================================================
	// Getter & Setter
	// ===========================================================


	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================


	@Override
	public LoopEntityModifier deepCopy()
			throws org.andengine.util.modifier.IModifier.DeepCopyNotSupportedException {
		return this.entityModifier.deepCopy();
	}



	@Override
	public float getDuration() {
		return 0;
	}



	@Override
	public float getSecondsElapsed() {
		return 0;
	}



	@Override
	public float onUpdate(float arg0, IEntity arg1) {
		return 0;
	}



	@Override
	public void reset() {
	}

}